#include "QtTestDate.h"
#include <QDebug>
#include "..\..\ex_11\Chrono.h"
using namespace Chrono;

void DateTest::DefaultCtorTest()
{
	Date default_date;
	QVERIFY(default_date.curr_day() == 0);
}

void DateTest::days_in_monthTest()
{
	QVERIFY(31 == days_in_month(Chrono::jan, false));
	QVERIFY(28 == days_in_month(Chrono::feb, false));
	QVERIFY(31 == days_in_month(Chrono::mar, false));
	QVERIFY(30 == days_in_month(Chrono::apr, false));
	QVERIFY(31 == days_in_month(Chrono::may, false));
	QVERIFY(30 == days_in_month(Chrono::jun, false));
	QVERIFY(31 == days_in_month(Chrono::jul, false));
	QVERIFY(31 == days_in_month(Chrono::aug, false));
	QVERIFY(30 == days_in_month(Chrono::sep, false));
	QVERIFY(31 == days_in_month(Chrono::oct, false));
	QVERIFY(30 == days_in_month(Chrono::nov, false));
	QVERIFY(31 == days_in_month(Chrono::dec, false));
	
	QVERIFY(31 == days_in_month(Chrono::jan, true));
	QVERIFY(29 == days_in_month(Chrono::feb, true));
	QVERIFY(31 == days_in_month(Chrono::mar, true));
	QVERIFY(30 == days_in_month(Chrono::apr, true));
	QVERIFY(31 == days_in_month(Chrono::may, true));
	QVERIFY(30 == days_in_month(Chrono::jun, true));
	QVERIFY(31 == days_in_month(Chrono::jul, true));
	QVERIFY(31 == days_in_month(Chrono::aug, true));
	QVERIFY(30 == days_in_month(Chrono::sep, true));
	QVERIFY(31 == days_in_month(Chrono::oct, true));
	QVERIFY(30 == days_in_month(Chrono::nov, true));
	QVERIFY(31 == days_in_month(Chrono::dec, true));
}

void DateTest::CtorTest()
{
	long dc = 0;
	for (int y = 1970; y < 20000; ++y)
		for	(int i = 1; i <=12; ++i)
		{
			Month m = Month(i);
			for (int d=1; d <= days_in_month(m, leapyear(y)); ++d)
			{
				Date testDate(y, m, d);
				if (testDate.curr_day()!=dc)
				{
					std::cout << "Date: " << testDate << '\t'
						<< "Day expected: " << dc << '\t'
						<< "Day actual: "   << testDate.curr_day(); 
					QFAIL ("");
				}
				//++dc;
			}
		}
}

QTEST_MAIN(DateTest);
